package br.com.vilababy.sigvb.mb;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.vilababy.sigvb.SIGVBUtil;
import br.com.vilababy.sigvb.constantes.PaginaEnum;
import br.com.vilababy.sigvb.constantes.SIGVBEnum;
import br.com.vilababy.sigvb.modelo.Login;
import br.com.vilababy.sigvb.repository.AutenticacaoRepository;
import br.com.vilababy.sigvb.repository.ISIGVBRepository;

@ManagedBean
@ViewScoped
public class AutenticacaoMBean implements Serializable {

	/**
	 *@author Diego Patrick da Silva Santos 
	 */
	private static final long serialVersionUID = 1L;
	
	private Login login = new Login();
	
	public Login getLogin() {
		return this.login;
	}
	
	public void setLogin(Login login) {
		this.login = login;
	}
	
	public String autenticar() {
		Login login = new Login();
		
		if (!SIGVBUtil.getObjetosSessao().containsKey(SIGVBEnum.USUARIO_LOGADO.getValor())) {
			ISIGVBRepository<Login> repository = new AutenticacaoRepository();
			login = ((AutenticacaoRepository)repository).autenticarBanco(this.login);
		}
		
		return getRedirecionamento(login);
	}
	
	public String sair() {
		SIGVBUtil.removerObjetoSessao(SIGVBEnum.USUARIO_LOGADO.getValor());
		return PaginaEnum.LOGIN.getValor();
	}
	
	private String getRedirecionamento(Login login) {
		
		String redirecionamento;
		
		if (login.getId() != null) {
			SIGVBUtil.setObjetoSessao(SIGVBEnum.USUARIO_LOGADO.getValor(), login.getUsuario());
			SIGVBUtil.setObjetoSessao(SIGVBEnum.USUARIO_NOME.getValor(), login.getNome());
			redirecionamento = PaginaEnum.PRINCIPAL.getValor();
			SIGVBUtil.adicionarParametroRetorno("loggedIn", true);
		} else {
			SIGVBUtil.adicionarMensagemErro(SIGVBUtil.getValorMensagem(SIGVBEnum.FALHA_AUTENTICACAO.getValor()), SIGVBUtil.getValorMensagem(SIGVBEnum.USUARIO_SENHA_INVALIDOS.getValor()));
			redirecionamento = PaginaEnum.LOGIN.getValor();
			SIGVBUtil.adicionarParametroRetorno("loggedIn", false);
		}
			
		
		return redirecionamento;
	}
}
